from flask_restful import Resource


class SMSVerificationCodeResource(Resource):
    """
    # TODO：接口文档已经放到docs文件夹下。
    短信验证码
    """

    def get(self, mobile):
        """
        1、生成随机的六位数手机验证码。
        2、验证码需要保存到redis中。
        3、TODO：在配置文件中添加redis主从+哨兵的配置，在创建app的工厂函数中，初始化redis_master和redis_slave
        4、TODO：在common下的celery_tasks完善异步发送短信的代码。可以使用celery+redis方式发送。第三方使用云通讯。
        5、TODO：记得要测试自己的功能哦。
        6、TODO：记得注册蓝图哦！！！
        :param mobile:
        :return:
        """

        return {"加油", "相信自己"}


class AuthorizationResource(Resource):
    """
    认证
    """

    def _generate_tokens(self, user_id, with_refresh_token=True):
        """
        生成token 和refresh_token
        :param user_id: 用户id
        :param with_refresh_token: 是否需要设定刷新token
        :return: token, refresh_token
        """
        # TODO: 完善生成token和生成refresh_token的逻辑。

        return "token", "refresh_token"

    def post(self):
        """
        1、接收参数请求参数。
        2、TODO：记得在使用RequestParser()的时候。type=parser.mobile, mobile需要自己定义规则哦！！！
        3、接收到mobile和code验证码后，需要去redis中先去获取真是的手机验证码。
        4、真是的验证码和用户输入的验证码进行比较。
        5、如果相等，通过手机查询出该用户是否存在。
        6、如果不存在，需要去使用User类添加用户。
        7、TODO：在添加用户的时候，记得知道用户的id为雪花算法id哦！！！不要忘记在UserProfile中也要添加用户信息。
        8、以上做完后，可以通过调用_generate_tokens生成token和refresh_token
        9、最后将记得返回{'token': token, 'refresh_token': refresh_token}, 201

        :return:
        """

        return "6666"

    # 补充put方式 更新token接口
    def put(self):
        """
        # 1、如果用户存在并且用户传入的是refresh_token，那么获取新的token
        # 2、TODO：判断用户是否存在？需要通过g变量拿到user，在哪里设置g变量呢？？？请求钩子？？？
        # 3、TODO：有了g变量，是不是可以把请求钩子完善一下啊！！！
        # 4、TODO：然而需要注意的是，如果用户只获取Token，就不返回refresh_token了。该怎么做呢？
        # 5、返回响应{'token': token}, 201
        :return:
        """
        return "哈哈哈"